function tineout(time) {
    return new Promise(reslove => {
        setTimeout(() => {
            reslove()
        }, time)
    })
}

//需要编写的代码
class SuperTask {
    constructor(poolSize = 2) {
        this.poolSize = poolSize //并发数量
        this.queue = []
        this.runingCount = 0
    }

    add(task) {
        return new Promise(reslove => {
            this.queue.pusn(task, reslove)
            this._run()
        })
    }

    _run() {
        while(this.runingCount < this.poolSize && this.queue.length) {
            const {task, reslove} = this.queue.shift()
            task().then(() => {
                reslove()
                this.runingCount--
                this._run()
            })
            this.runingCount++
        }
    }
}

const superTask = new SuperTask()
function addTask(time, name) {
    superTask
    .add(() => tineout(time))
    .then(() => {
        console.log(`任务${name}完成`)    
    })
}

addTask(10000, '1')  //10s后输出任务1完成
addTask(5000, '2')   //5s后输出任务2完成
addTask(3000, '3')   //8s后输出任务3完成
addTask(4000, '4')   //12s后输出任务4完成
addTask(5000, '5')   //15s后输出任务5完成 